home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Info-Mac 4
/
Info_Mac IV CD-ROM (Pacific HiTech Inc.)(August 1994).iso
/
Development
/
Source
/
Telnet 2.6.1d1 4⁄26⁄94 Folder
/
Krb
/
des_cornell.c
next >
Wrap
Text File
|
1994-04-16
|
5KB
|
238 lines
/*
* Des stub routines to use DES routines from Cornell's Kdriver.
*/
#ifdef TN3270
#pragma segment 3270tcp
#define bzero xbzero
#endif
#include "TelnetHeader.h"
#ifdef NCSA_ENC
#pragma segment 22
#define bzero xbzero
#endif
#ifndef __powerpc__
#include <Devices.h>
#include <Files.h>
#include <Traps.h>
//#include <SysEqu.h>
#include "glue.h"
#endif
#include "KrbDriver.h"
#include "encrypt.h"
#include "desproto.h"
void bzero(void *, long);
static short kdriver = 0; /* .Kerberos driver ref */
long driverA4; /* a4 in driver environment */
long (*c_des_new_random_key)(des_cblock key) = 0;
long (*c_des_ecb_encrypt)(unsigned long *clear, unsigned long *cipher, des_key_schedule schedule, long encrypt) = 0;
long (*c_des_set_random_generator_seed)(des_cblock *key) = 0;
long (*c_des_key_sched)(des_cblock k, des_key_schedule schedule) = 0;
void (*c_des_init_random_number_generator)(des_cblock key) = 0;
long (*c_des_pcbc_encrypt)(unsigned char *in, unsigned char * out, register long length,
des_key_schedule key, unsigned char *iv, long encrypt) = 0;
long (*c_des_string_to_key)(char *str, unsigned char *key) = 0;
unsigned long (*c_des_quad_cksum) (unsigned char *in, unsigned long *out, long length,
long out_count, unsigned char *c_seed) = 0;
long (*c_gettimeofdaynet) (struct timeval *tp, struct timezone *tz) = 0;
/*
* init_cornell_des
* Returns -2 if no kdriver
* Returns other error if this kdriver does not have the DES hooks.
*/
long init_cornell_des ()
{
#ifdef __powerpc__
return(-2); // Not yet...
#else
short s;
ParamBlockRec pb;
long addrs[10];
/*
* Open the .Kerberos driver if not already open
*/
if (!kdriver) {
if (s = OpenDriver("\p.Kerberos", &kdriver)) {
return -2;
}
}
bzero(&pb, sizeof(ParamBlockRec));
((long *)pb.cntrlParam.csParam)[0] = (long)&addrs[0];
((long *)pb.cntrlParam.csParam)[1] = sizeof(addrs)/sizeof(long);
pb.cntrlParam.ioCompletion = nil;
pb.cntrlParam.ioCRefNum = kdriver;
pb.cntrlParam.csCode = cKrbGetDesPointers;
if (s = PBControl(&pb, false))
return s;
if (s = pb.cntrlParam.ioResult)
return s;
driverA4 = addrs[0];
c_des_new_random_key = (long(*)()) addrs[1];
c_des_ecb_encrypt = (long(*)()) addrs[2];
c_des_set_random_generator_seed = (long(*)()) addrs[3];
c_des_key_sched = (long(*)()) addrs[4];
c_des_init_random_number_generator = (void(*)()) addrs[5];
c_des_pcbc_encrypt = (long(*)()) addrs[6];
c_des_string_to_key = (long(*)()) addrs[7];
c_des_quad_cksum = (unsigned long(*)()) addrs[8];
c_gettimeofdaynet = (long(*)()) addrs[9];
return 0;
#endif
}
long des_new_random_key(des_cblock key)
{
#ifndef __powerpc__
long oldA4;
long s = 0;
if (c_des_new_random_key) {
oldA4 = swapA4(driverA4);
s = (*c_des_new_random_key)(key);
swapA4(oldA4);
}
return s;
#endif
}
long des_ecb_encrypt(unsigned long *clear, unsigned long *cipher, des_key_schedule schedule, long encrypt)
{
#ifndef __powerpc__
long oldA4;
long s = 0;
if (c_des_ecb_encrypt) {
oldA4 = swapA4(driverA4);
s = (*c_des_ecb_encrypt)(clear, cipher, schedule, encrypt);
swapA4(oldA4);
}
return s;
#endif
}
long des_set_random_generator_seed(des_cblock *key)
{
#ifndef __powerpc__
long oldA4;
long s = 0;
if (c_des_set_random_generator_seed) {
oldA4 = swapA4(driverA4);
s = (*c_des_set_random_generator_seed)(key);
swapA4(oldA4);
}
return s;
#endif
}
long des_key_sched(des_cblock k, des_key_schedule schedule)
{
#ifndef __powerpc__
long oldA4;
long s = 0;
if (c_des_key_sched) {
oldA4 = swapA4(driverA4);
s = (*c_des_key_sched)(k, schedule);
swapA4(oldA4);
}
return s;
#endif
}
void des_init_random_number_generator(des_cblock key)
{
#ifndef __powerpc__
long oldA4;
if (c_des_init_random_number_generator) {
oldA4 = swapA4(driverA4);
(*c_des_init_random_number_generator)(key);
swapA4(oldA4);
}
#endif
}
long des_pcbc_encrypt (unsigned char *in, unsigned char * out, register long length,
des_key_schedule key, unsigned char *iv, long encrypt)
{
#ifndef __powerpc__
long oldA4, s = 0;
if (c_des_pcbc_encrypt) {
oldA4 = swapA4(driverA4);
s = (*c_des_pcbc_encrypt)(in, out, length, key, iv, encrypt);
swapA4(oldA4);
}
return s;
#endif
}
long des_string_to_key (char *str, unsigned char *key)
{
#ifndef __powerpc__
long oldA4, s = 0;
if (c_des_string_to_key) {
oldA4 = swapA4(driverA4);
s = (*c_des_string_to_key)(str, key);
swapA4(oldA4);
}
return s;
#endif
}
unsigned long des_quad_cksum (unsigned char *in, unsigned long *out, long length,
long out_count, unsigned char *c_seed)
{
#ifndef __powerpc__
long oldA4;
unsigned long s = 0;
if (c_des_quad_cksum) {
oldA4 = swapA4(driverA4);
s = (*c_des_quad_cksum)(in, out, length, out_count, c_seed);
swapA4(oldA4);
}
return s;
#endif
}
long gettimeofdaynet (struct timeval *tp, struct timezone *tz)
{
#ifndef __powerpc__
long oldA4, s = 0;
if (c_gettimeofdaynet) {
oldA4 = swapA4(driverA4);
s = (*c_gettimeofdaynet)(tp, tz);
swapA4(oldA4);
}
return s;
#endif
}